home *** CD-ROM | disk | FTP | other *** search
/ MacHack 2000 / MacHack 2000.toast / pc / The Hacks / katz / katz.c next >
C/C++ Source or Header  |  2000-06-23  |  2KB  |  151 lines

  1. #pragma pack(2)
  2. #include <Common.h>
  3. #include <System/SysAll.h>
  4. #include <UI/UIAll.h>
  5. #include <SerialMgr.h>
  6. #include <System/SysEvtMgr.h>
  7.  
  8. #define NON_PORTABLE
  9. #define asm
  10. #include <Hardware/Hardware.h>
  11.  
  12.  
  13. Word *LCDX = (Word *) 0xFFFFFA18;
  14. Word *LCDY = (Word *) 0xFFFFFA1A;
  15. Word *LCDWH = (Word *) 0xFFFFFA1C;
  16. Byte *LCDBL = (Byte *) 0xFFFFFA1F;
  17.  
  18. UInt16 SerL;
  19.  
  20. void setup()
  21. {
  22.   SerSettingsType serSettings;
  23.  
  24. #define BAUD 1200
  25.  
  26.   SerOpen(SerL, 0, BAUD);
  27.  
  28.   SerGetSettings(SerL, &serSettings);
  29.   serSettings.flags = serSettingsFlagBitsPerChar8 | serSettingsFlagStopBits1;
  30.   SerSetSettings(SerL, &serSettings);
  31.  
  32.   *LCDX = 0x8000 + 80;
  33.   *LCDY = 80;
  34.   *LCDWH = 0x0404;
  35.   *LCDBL = 0x88;
  36. }
  37.  
  38. void teardown()
  39. {
  40.   SerClose(SerL);
  41.   *LCDX &= 0x3fff;
  42. }
  43.  
  44. void dokatt()
  45. {
  46.   char buf[4];
  47.   int x, y, b;
  48.   int x0, y0;
  49.  
  50.   SerReceive10(SerL, buf, 3, -1);
  51.  
  52.   if (!(buf[0] & 0x40)) {
  53.     while (!(buf[0] & 0x40))
  54.       SerReceive10(SerL, buf, 1, -1);
  55.     SerReceive10(SerL, &buf[1], 2, -1);
  56.   }
  57.  
  58.   b = buf[0] & 0x30;            /* 0x20 is button 1 */
  59.   x = ((buf[0] & 3) << 14) | ((buf[1] & 0x3f) << 8);
  60.   y = ((buf[0] & 0x0c) << 12) | ((buf[2] & 0x3f) << 8);
  61.  
  62. #define SCALE 10
  63.  
  64.   x >>= SCALE;
  65.   y >>= SCALE;
  66.  
  67.  
  68.  
  69.   x0 = (*LCDX & 0xff) + x;
  70.   if (x0 < 0)
  71.     x0 = 0;
  72.   if (x0 > 159)
  73.     x0 = 159;
  74.  
  75.   if (x0 > 156)
  76.     *LCDWH = 4 + ((160 - x0) << 8);
  77.   else
  78.     *LCDWH = 0x0404;
  79.   *LCDX = (0x8000 | x0);
  80.  
  81.  
  82.  
  83.   y0 = *LCDY + y;
  84.   if (y0 < 0)
  85.     y0 = 0;
  86.   if (y0 > 159)
  87.     y0 = 159;
  88.   *LCDY = y0;
  89.  
  90.  
  91.  
  92.   if (b & 0x20) {
  93.     RectangleType r = { {x0, y0}
  94.     , {4, 4}
  95.     };
  96.  
  97.     WinDrawRectangle(&r, 0);
  98.   }
  99.  
  100.   if (b & 0x10) {
  101.     RectangleType r = { {x0, y0}
  102.     , {4, 4}
  103.     };
  104.  
  105.     WinEraseRectangle(&r, 0);
  106.   }
  107.  
  108. }
  109.  
  110.  
  111. DWord PilotMain(Word cmd, Ptr cmdPBP, Word launchFlags)
  112. {
  113.   short err;
  114.   long full;
  115.   EventType event;
  116.  
  117.  
  118.   if (cmd != sysAppLaunchCmdNormalLaunch)
  119.     return 0;
  120.  
  121.   SysLibFind("Serial Library", &SerL);
  122.  
  123.   setup();
  124.  
  125.   do {
  126.     EvtGetEvent(&event, 0);
  127.  
  128.     EvtResetAutoOffTimer();
  129.  
  130.     if (SerReceiveCheck(SerL, &full))
  131.       SerClearErr(SerL);
  132.  
  133.     if (full >= 3)
  134.       dokatt();
  135.  
  136.     if (event.eType == nilEvent)
  137.       continue;
  138.  
  139.  
  140.     if (SysHandleEvent(&event))
  141.       continue;
  142.     if (MenuHandleEvent((void *) 0, &event, &err))
  143.       continue;
  144.  
  145.   } while (event.eType != appStopEvent);
  146.  
  147.   teardown();
  148.  
  149.   return 0;
  150. }
  151.